
from gevent import monkey
import time
import gevent

monkey.patch_all() # 将用到的 time.sleep() 替换成gevent里吗自己实现的 gevent.sleep(), 放到最上方

def sing(name):
   for i in range(3):
       time.sleep(1)
       print(f"{name} is singing, it's time {i}")


if __name__ == "__main__":
    gevent.joinall([
        gevent.spawn(sing, "leslie"),
        gevent.spawn(sing, "moon")
    ])

    print("Perfect show.")


# gevent: 自动切换
# greenlet: 手动切换


# 线程: CPU调度的基本单位
# 进程: 资源分配的基本单位
# 协程: 单线程内的多任务

# 对比
# 进程: 需要的资源最大
# 线程: 中间位置
# 协程: 需要的资源最小, 效率高

# 多线程适合IO密集型操作,文件操作,爬虫
# 多进程适合CPU密集型操作,科学计算, 视频解码

# 三者都可以完成多任务